<?php
class M_factura extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener las facturas de servicios de clientes existentes tanto pagas, impagas como canceladas, pero no las borradas (-1)
	function buscar($restriccion=null, $limite=null){
		$consulta = $this->db->query("SELECT factura.*, 
		                                     cliente.idCliente as idCliente, 
											 cliente.apellido as apellidoCliente, 
											 cliente.nombre as nombreCliente, 
											 servicio.idServicio as idServicio, 
											 servicio.nombre as nombreServicio,
											 servicioxcliente.codigoBarras as codigoBarras,
											 DATE_FORMAT(factura.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											 DATE_FORMAT(factura.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada,
											 DATE_FORMAT(factura.fecha,'%d/%m/%Y') AS fechaFormateada
									  FROM factura, servicioxcliente, servicio, cliente
									  WHERE factura.idSxC=servicioxcliente.idSxC AND servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.idCliente=cliente.idCliente AND factura.estado<>-1 AND servicioxcliente.estado<>-1 AND cliente.estado<>-1 $restriccion
									  ORDER BY factura.numeroFactura DESC
									  $limite");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los servicios con mayor cantidad de facturas impagas
	function buscarDeudores($restriccion=null){
		$consulta = $this->db->query("SELECT COUNT(factura.idFactura) AS cantFacturasImpagas,
		                                     cliente.idCliente as idCliente, 
											 cliente.apellido as apellidoCliente, 
											 cliente.nombre as nombreCliente, 
											 servicioxcliente.idSxC as idSxC,
											 servicioxcliente.url as url,
											 servicioxcliente.facebook as facebook,
											 servicioxcliente.estado as estadoServicio,
											 servicio.nombre as nombreServicio
									  FROM factura, servicioxcliente, servicio, cliente
									  WHERE factura.idSxC=servicioxcliente.idSxC AND servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.idCliente=cliente.idCliente AND factura.estado=0 AND servicioxcliente.estado<>-1 AND cliente.estado<>-1 $restriccion
									  GROUP BY servicioxcliente.idSxC
									  ORDER BY cantFacturasImpagas DESC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener el total cobrado a clientes
	function buscarTotal($restriccion=null){
		$consulta = $this->db->query("SELECT SUM(factura.total) as total
									  FROM factura, servicioxcliente, servicio, cliente
									  WHERE factura.idSxC=servicioxcliente.idSxC AND servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.idCliente=cliente.idCliente AND factura.estado=1 AND servicioxcliente.estado<>-1 AND cliente.estado<>-1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener el total de ciertas facturas
	function buscarTotalGananciaReferente($restriccion=null){
		$consulta = $this->db->query("SELECT SUM(factura.gananciaReferente) as totalGananciaReferente
									  FROM factura, servicioxcliente, servicio, cliente
									  WHERE factura.idSxC=servicioxcliente.idSxC AND servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.idCliente=cliente.idCliente AND factura.estado=1 AND servicioxcliente.estado<>-1 AND cliente.estado<>-1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar una factura de servicio de un cliente
	function eliminar($idFactura=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `factura` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `factura`.`idFactura` = " . $this->db->escape($idFactura) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear una factura de servicio a un cliente
	function crear($idSxC=null, $numeroFactura=null, $fecha=null, $mes=null, $anio=null, $total=null, $gananciaReferente=null, $estado=null, $idCreador=null){
		$this->db->query("UPDATE `configuracion` SET `numeroFacturaSiguiente` = `numeroFacturaSiguiente` + 1 WHERE `configuracion`.`idConfiguracion`=1 LIMIT 1");
		
		$this->db->query("INSERT INTO `factura` (`idFactura`, `idSxC`, `numeroFactura`, `fecha`, `mes`, `anio`, `total`, `gananciaReferente`, `fechaCreacion`, `estado`, `idCreador`) VALUES 
											    (NULL,".$this->db->escape($idSxC).",".$this->db->escape($numeroFactura).",".$this->db->escape($fecha).",".$this->db->escape($mes).",".$this->db->escape($anio).",".$this->db->escape($total).",".$this->db->escape($gananciaReferente).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver una factura de servicio del cliente en particular usado generalmente en el formulario de modificar
	function get($idFactura=null){
		$consulta = $this->db->query("SELECT factura.*, cliente.apellido as apellidoCliente, cliente.nombre as nombreCliente, servicio.nombre as nombreServicio
									  FROM factura, servicioxcliente, cliente, servicio
									  WHERE factura.idSxC=servicioxcliente.idSxC AND servicioxcliente.idCliente=cliente.idCliente AND servicioxcliente.idServicio=servicio.idServicio AND factura.estado<>-1 AND servicioxcliente.estado<>-1 AND cliente.estado<>-1 AND factura.idFactura=".$this->db->escape($idFactura)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza para modificar una factura de servicio de un cliente
	function modificar($idFactura=null, $total=null, $gananciaReferente=null, $estado=null){
		$consulta = $this->db->query("UPDATE `factura`
									 SET `total` = ". $this->db->escape($total) .",
										 `gananciaReferente` = ". $this->db->escape($gananciaReferente) .",										 
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `factura`.`idFactura` = " . $this->db->escape($idFactura) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>